package com.yc.spring;

import com.yc.spring.bbs.bean.User;
import com.yc.spring.bbs.biz.UserBiz;
import com.yc.spring.bbs.dao.UserDao;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;


@RunWith(SpringRunner.class)
//spring 测试配置注解
@ContextConfiguration(classes = IocConfig.class)
public class AopTest {

    @Autowired
    @Qualifier("userDaoImpl")
    UserDao dao;

    @Test
    public void test1(){
        dao.selectList(new User(),0,0);
        dao.selectOne(111);

    }

    @Test
    public void test2(){
//        dao.insert(null);
        dao.count(new User());
    }

    @Qualifier("userDaoProxy1")
    @Autowired
    UserDao userDaoProxy1;

    @Autowired
    @Qualifier("userDaoProxy2")
    UserDao userDaoProxy2;

    //   Bean named 'userDaoProxy2' is expected to be of type 'com.yc.spring.bbs.dao.UserDaoImpl'
    //   ut was actually of type 'com.sun.proxy.$Proxy31'

//    这个错误是因为你正在尝试将一个代理对象注入到 'UserDaoImpl' 类型的变量中。当你在 Spring 中使用代理（如AOP），
//    javax.swing.Spring 默认会使用 JDK 的动态代理，它生成的代理类并不会继承目标对象的类，而是实现目标对象的接口。
//    所以这就导致了类型转换出错。

    //报错  1.因为组件被aop增强且组件有实现接口  使用jdk代理
    // 2. 代理对象implements UserDao    所以 代理对象和 userDaoImpl(  implements UserDao ) 为兄弟
    // 3. 故无法注入,即无法转型
//    @Autowired
//    UserDaoImpl userDaoImpl;


    @Test
    public void test3(){
        userDaoProxy1.insert(null);
        System.out.println("****************************************");
        userDaoProxy2.insert(null);
        System.out.println("****************************************");
    }


    @Autowired
    UserBiz userBiz;

    @Test
    public void test4(){
        System.out.println("userBiz = " + userBiz);
        System.out.println();
        System.out.println("userDaoProxy1 = " + userDaoProxy1);
        System.out.println();
        System.out.println("userDaoProxy2 = " + userDaoProxy2);
    }

}
